home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- organization: Organization for Much More Organization, Inc.
- keywords: Line Editor for dumb terminals
- subject: v08i063: SMiLE = Simple MIni Line Editor
- from: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
- Reply-To: acliu%skat.usc.edu@usc.edu (Alejandro Liu)
-
- Posting-number: Volume 8, Issue 63
- Submitted-by: acliu%skat.usc.edu@usc.edu (Alejandro Liu)
- Archive-name: smile
-
- SMiLE -- Simple MIni Line Editor
- --------------------------------
-
- This program was originally intended to be used in a BBS program, but
- I got lazy and didn't write the BBS. The idea of this program is to
- provide a very easy to use and rather "powerful" Line Editor with very
- little terminal support. This program was orginially written for a
- Commodore 64, so it should be rather easy to port to other system.
- This current version is a Unix BSD type system. (Actually Sun OS
- 4.0.?). I haven't tested if it compiles on other system, but It
- SHOULD!
-
- You can include this program in your programs as long as you give me
- credit and send me a E-mail postcard! And you can hack it as much as
- you like provide it you keep the copyright notice and redistribut it
- unmodified (You can distribute your changes in a DIFF file though!)
-
- Alejandro Liu <acliu@skat.usc.edu>
-
- #!/bin/sh
- # This is a shell archive, meaning:
- # 1. Remove everything above the #!/bin/sh line.
- # 2. Save the resulting text in a file.
- # 3. Execute the file with /bin/sh (not csh) to create the files:
- # smile.c
- # bsd_tty.h
- # smile.h
- # smile_main.c
- # suntty.c
- # Makefile
- # README
- # smile.man
- # This archive created: Fri Sep 29 03:14:38 1989
- export PATH; PATH=/bin:$PATH
- echo shar: extracting "'smile.c'" '(10091 characters)'
- if test -f 'smile.c'
- then
- echo shar: over-writing existing file "'smile.c'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'smile.c'
- X/* SMiLE -- Simple MIni Line Editor
- X Copyright (C) 1989 By Alejandro Liu
- X You are given permission to Freely Copy and distribute this program
- X in its unmodifed form provided that this copyright notice is included.
- X */
- X
- X#include "smile.h"
- X#include "bsd_tty.h"
- X#include <ctype.h>
- X#include <stdio.h>
- X#include <strings.h>
- X
- X#define TRUE 1
- X#define FALSE 0
- X#define TSTR 100
- X
- Xmakebar(width)
- Xchar width;
- X{
- X int i;
- X for (i = 0;i<width;i++) {
- X if (i%8)
- X prtchr('-');
- X else
- X prtchr('!');
- X };
- X if ((width-1)%8)
- X prtchr('!');
- X prtchr(NEWLIN);
- X}
- X
- Xsmile_intro(width)
- Xint width;
- X{
- X prtstr("\n");
- X prtstr("SMiLE -- Simple MIni Line Editor (C) By Alejandro Liu Aug 1989\n");
- X prtstr("Press ESC (CTRL+[) for menu. CTRL+X to exit SMiLE\n");
- X prtstr(" ");
- X makebar(width);
- X}
- X
- Xint smile(head,wwrap,width)
- Xed_line *head;
- Xchar wwrap,width;
- X{
- X ed_line *current, *temp;
- X char c_buf[TSTR], c_lin, c_col, key, i, j;
- X extern char smile_menu();
- X
- X c_col = 0;
- X c_lin = 1;
- X current = head;
- X smile_intro(width);
- X pull(&c_col, c_buf, current);
- X showlin(c_lin,c_buf,c_col);
- X
- X for (;;) {
- X key = 127 & getkey();
- X switch (key) {
- X case PREV_L:
- X if (c_lin-1) {
- X c_lin--;
- X push(c_buf,current);
- X temp = current->previous;
- X current = temp;
- X if (current == NULL) current = head;
- X pull(&c_col, c_buf, current);
- X prtchr(NEWLIN);
- X showlin(c_lin,c_buf, c_col);
- X }
- X else
- X beep();
- X break;
- X case NEXT_L:
- X if (current->next == NULL)
- X beep();
- X else {
- X c_lin++;
- X push(c_buf, current);
- X temp = current->next;
- X current = temp;
- X pull(&c_col, c_buf, current);
- X prtchr(NEWLIN);
- X showlin(c_lin,c_buf,c_col);
- X }
- X break;
- X case INSER_L:
- X case INSERT_L:
- X insertl(current);
- X push(c_buf,current);
- X temp = current->next;
- X current = temp;
- X current->len = 0;
- X c_col = 0;
- X c_lin++;
- X c_buf[0] = 0;
- X prtchr(NEWLIN);
- X showlin(c_lin,c_buf,c_col);
- X break;
- X case LEFT_C:
- X if (c_col) {
- X c_col--;
- X backspace(1);
- X }
- X else
- X beep();
- X break;
- X case RIGHT_C:
- X if (c_col == current->len)
- X beep();
- X else {
- X putchar(c_buf[c_col]);
- X c_col++;
- X }
- X break;
- X case DEL_00:
- X case DEL_01:
- X case DEL_02:
- X if (c_col) {
- X if (c_col == current->len) {
- X delete(1);
- X c_buf[c_col--] = 0;
- X (current->len)--;
- X }
- X else {
- X delete(1);
- X for (i = c_col; i<=current->len;i++) {
- X c_buf[i-1] = c_buf[i];
- X if (c_buf[i])
- X prtchr(c_buf[i]);
- X else
- X prtchr(' ');
- X }
- X backspace((current->len) - c_col + 1);
- X c_col--;
- X current->len--;
- X }
- X }
- X else
- X beep();
- X break;
- X case KILL_L:
- X if (c_col == current->len) {
- X if (current->next) {
- X char *mirage;
- X temp = current->next;
- X delete(c_col + 3);
- X c_col = strlen(c_buf) + strlen(temp->data);
- X mirage = (char *)malloc(c_col + 1);
- X strcpy(mirage,c_buf);
- X strcat(mirage,temp->data);
- X current->next = temp->next;
- X free(temp->data);
- X free(temp);
- X if (temp = current->next)
- X temp->previous = current;
- X if (c_col >= width) {
- X c_col = width -1;
- X mirage[c_col] = 0;
- X }
- X current->len = c_col;
- X strcpy(c_buf,mirage);
- X free(mirage);
- X showlin(c_lin, c_buf, c_col);
- X }
- X else
- X beep();
- X }
- X else {
- X for (i=c_col;i<current->len;i++)
- X prtchr(' ');
- X backspace(current->len - c_col);
- X c_buf[current->len = c_col] = 0;
- X }
- X break;
- X case MSG_LST:
- X push(c_buf,current);
- X listmsg(width, head);
- X showlin(c_lin, c_buf, c_col);
- X break;
- X case PREVIEW:
- X push(c_buf,current);
- X preview(width, head);
- X showlin(c_lin, c_buf, c_col);
- X break;
- X case EXIT:
- X push(c_buf, current);
- X return(NORMAL_SAVE);
- X case MENU:
- X push(c_buf,current);
- X if (i = smile_menu(head,FULL_MENU, &wwrap, &width, MENU))
- X if ((i == NORMAL_SAVE) || (i == QUICK_SAVE) || (i == ABORT)) {
- X push(c_buf,current);
- X return(i);
- X }
- X showlin(c_lin,c_buf,c_col);
- X break;
- X case DOTKEY0:
- X case DOTKEY1:
- X if (c_col == 0) {
- X push(c_buf,current);
- X if (i = smile_menu(head,DOT_MENU, &wwrap, &width, key)) {
- X switch (i) {
- X case NORMAL_SAVE:
- X case QUICK_SAVE:
- X case ABORT:
- X push(c_buf,current);
- X return(i);
- X case DOTKEY0:
- X case DOTKEY1:
- X insertc(c_buf, &c_col, &(current->len), i);
- X delete(1);
- X break;
- X }
- X }
- X showlin(c_lin,c_buf,c_col);
- X break;
- X }
- X default:
- X if ((31<key)&&(key<127)) {
- X if (c_col == width) {
- X if (wwrap) {
- X i = c_col;
- X while (i&&(c_buf[i--]!=32));
- X if (i) {
- X if ((c_col-i-1)>0)
- X delete(c_col-i-1);
- X c_buf[++i] = 0;
- X insertl(current);
- X push(c_buf,current);
- X current = current->next;
- X c_lin++;
- X push(&c_buf[i+1], current);
- X pull(&c_col, c_buf, current);
- X c_col = current->len;
- X prtchr(NEWLIN);
- X showlin(c_lin,c_buf,c_col);
- X }
- X else {
- X insertl(current);
- X push(c_buf, current);
- X current = current->next;
- X current->len = 0;
- X c_col = 0;
- X c_lin++;
- X c_buf[0]= 0;
- X prtchr(NEWLIN);
- X showlin(c_lin,c_buf,c_col);
- X }
- X insertc(c_buf,&c_col, &(current->len),key);
- X }
- X else
- X beep();
- X }
- X else
- X insertc(c_buf, &c_col, &(current->len),key);
- X }
- X else
- X beep();
- X }
- X }
- X}
- X
- Xinsertc(buffer, col, len, key)
- Xchar buffer[], *col, *len, key;
- X{
- X buffer[*col] = key;
- X if ((*col)++ == (*len))
- X buffer[++(*len)] = 0;
- X prtchr(key);
- X}
- X
- Xbackspace(rept)
- Xchar rept;
- X{
- X while (rept--)
- X prtchr(8);
- X}
- X
- Xdelete(rept)
- Xchar rept;
- X{
- X while (rept--) {
- X prtchr(8);
- X prtchr(' ');
- X prtchr(8);
- X }
- X}
- X
- Xshowlin(line,buffer,column)
- Xchar line, column, *buffer;
- X{
- X char leng;
- X printf("%2d>",line);
- X prtstr(buffer);
- X leng = strlen(buffer);
- X if (leng != column)
- X backspace(leng-column);
- X}
- X
- X
- Xchar smile_menu(head,type, wrap, width, nkey)
- Xed_line *head;
- Xchar type, *wrap, *width, nkey;
- X{
- X char key, *jet;
- X extern char *getstr();
- X if (type == FULL_MENU) {
- X prtstr("\nSMiLE -- Simple MIni Line Editor MENU (C) Aug 1989 Alejandro Liu\n\n");
- X prtstr("S - Quick Save A - Abort Editor L - List Text V - Preview Text\n");
- X prtstr("W - Wrd Wrp Toggle N - Screen Width H - Help Screen C - Check Spelling\n");
- X prtstr("Command -->");
- X }
- X else
- X prtstr("Command: ");
- X key = getkey();
- X if (isupper(key))
- X key = tolower(key);
- X switch(key) {
- X case DOTSAV:
- X prtstr("Save Message\n");
- X return(QUICK_SAVE);
- X case DOTHLP:
- X smile_help(*wrap,*width);
- X break;
- X case DOTABT:
- X prtstr("Abort Message\n");
- X return(ABORT);
- X case DOTLST:
- X prtstr("List Message\n");
- X listmsg(*width,head);
- X break;
- X case DOTPVW:
- X prtstr("Preview Message\n");
- X preview(*width,head);
- X break;
- X case DOTWRW:
- X if (*wrap) {
- X *wrap = FALSE;
- X prtstr("Word Wrap Is Off\n");
- X }
- X else {
- X *wrap = TRUE;
- X prtstr("Word Wrap Is On\n");
- X }
- X break;
- X case DOTFNY:
- X prtstr("Funny Command\n");
- X prtstr("A Funny thing happened to me on my way to the forum... \n");
- X prtstr("I Got there! hahahaha\n");
- X break;
- X case DOTSPC:
- X prtstr("Check Spelling\n");
- X prtstr("SMiLE Spell Checker\n");
- X prtstr("Sorry, the dictionary has been erased\n");
- X break;
- X case DOTCWD:
- X prtstr("Max Col? --> ");
- X jet = getstr();
- X *width = atoi(jet);
- X prtstr("\nScreen Width Set to = ");
- X printf("%d",*width);
- X prtchr(NEWLIN);
- X break;
- X default:
- X if ((type != FULL_MENU)&&(nkey == key)) {
- X delete(13);
- X return(key);
- X }
- X else {
- X beep();
- X prtstr("Unrecognized Command\n");
- X }
- X }
- X return(0);
- X}
- X
- Xlistmsg(width,head)
- Xchar width;
- Xed_line *head;
- X{
- X char cnt = 1;
- X prtstr("SMiLE File Lister\n ");
- X makebar(width);
- X while (head) {
- X if (((2+cnt)%24)==0)
- X pause();
- X printf("%2d>",cnt++);
- X prtstr(head->data);
- X prtchr(NEWLIN);
- X head = head->next;
- X }
- X prtchr(NEWLIN);
- X}
- X
- Xpreview(width,head)
- Xchar width;
- Xed_line *head;
- X{
- X char cnt = 3;
- X prtstr("SMiLE File Previewer\n");
- X makebar(width);
- X while (head) {
- X if (((cnt++)%24)==0)
- X pause();
- X prtstr(head->data);
- X prtchr(NEWLIN);
- X head = head->next;
- X }
- X prtchr(NEWLIN);
- X}
- X
- Xinsertl(ptr)
- Xed_line *ptr;
- X{
- X ed_line *tmp, *tmp2, bogus;
- X tmp = (ed_line *)malloc(sizeof(bogus));
- X tmp->previous = ptr;
- X tmp2 = tmp->next = ptr->next;
- X ptr->next = tmp;
- X if (tmp2)
- X tmp2->previous = tmp;
- X tmp->data = (char *)malloc(2);
- X tmp->len = 0;
- X *(tmp->data) = 0;
- X}
- X
- Xpull(col,buf,cur)
- Xchar *col, *buf;
- Xed_line *cur;
- X{
- X strcpy(buf,cur->data);
- X cur->len = strlen(buf);
- X if (*col>(cur->len))
- X *col = cur->len;
- X}
- X
- Xpush(buf,cur)
- Xchar *buf;
- Xed_line *cur;
- X{
- X free(cur->data);
- X cur->len = strlen(buf);
- X cur->data = (char *)malloc((cur->len) + 1);
- X strcpy(cur->data,buf);
- X}
- X
- Xpause()
- X{
- X prtstr("* MORE *");
- X beep();
- X getkey();
- X delete(8);
- X}
- SHAR_EOF
- if test 10091 -ne "`wc -c 'smile.c'`"
- then
- echo shar: error transmitting "'smile.c'" '(should have been 10091 characters)'
- fi
- echo shar: extracting "'bsd_tty.h'" '(370 characters)'
- if test -f 'bsd_tty.h'
- then
- echo shar: over-writing existing file "'bsd_tty.h'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'bsd_tty.h'
- X/* SMiLE -- Simple MIni Line Editor
- X Copyright (C) 1989 By Alejandro Liu
- X You are given permission to Freely Copy and distribute this program
- X in its unmodifed form provided that this copyright notice is included.
- X */
- X
- X#define prtchr(dta) putchar(dta)
- X#define NEWLIN '\n'
- X#define beep() prtchr(7)
- X#define prtstr(string) printf(string)
- X#define getkey() getchar()
- SHAR_EOF
- if test 370 -ne "`wc -c 'bsd_tty.h'`"
- then
- echo shar: error transmitting "'bsd_tty.h'" '(should have been 370 characters)'
- fi
- echo shar: extracting "'smile.h'" '(1175 characters)'
- if test -f 'smile.h'
- then
- echo shar: over-writing existing file "'smile.h'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'smile.h'
- X/* SMiLE -- Simple MIni Line Editor
- X Copyright (C) 1989 By Alejandro Liu
- X You are given permission to Freely Copy and distribute this program
- X in its unmodifed form provided that this copyright notice is included.
- X */
- X
- X#define PREV_L 16
- X#define NEXT_L 14
- X#define INSER_L 13
- X#define INSERT_L 10
- X#define LEFT_C 2
- X#define RIGHT_C 6
- X#define DEL_00 8
- X#define DEL_01 127
- X#define DEL_02 20
- X#define KILL_L 11
- X#define MSG_LST 12
- X#define PREVIEW 22
- X#define EXIT 24
- X#define MENU 27
- X#define DOTKEY0 '.'
- X#define DOTKEY1 '/'
- X#define DOTSAV 's'
- X#define DOTHLP 'h'
- X#define DOTABT 'a'
- X#define DOTLST 'l'
- X#define DOTPVW 'v'
- X#define DOTWRW 'w'
- X#define DOTFNY 'f'
- X#define DOTSPC 'c'
- X#define DOTCWD 'n'
- X
- Xstruct ED_line {
- X struct ED_line *previous;
- X struct ED_line *next;
- X char len;
- X char *data;
- X};
- X
- Xtypedef struct ED_line ed_line;
- X
- X#define FULL_MENU 0
- X#define DOT_MENU 1
- X
- X#define NORMAL_SAVE 1
- X#define QUICK_SAVE 2
- X#define ABORT 3
- SHAR_EOF
- if test 1175 -ne "`wc -c 'smile.h'`"
- then
- echo shar: error transmitting "'smile.h'" '(should have been 1175 characters)'
- fi
- echo shar: extracting "'smile_main.c'" '(3320 characters)'
- if test -f 'smile_main.c'
- then
- echo shar: over-writing existing file "'smile_main.c'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'smile_main.c'
- X/* SMiLE -- Simple MIni Line Editor
- X Copyright (C) 1989 By Alejandro Liu
- X You are given permission to Freely Copy and distribute this program
- X in its unmodifed form provided that this copyright notice is included.
- X */
- X
- X#include "bsd_tty.h"
- X#include "smile.h"
- X#include <stdio.h>
- X
- Xmain(argc,argv)
- Xint argc;
- Xchar *argv[];
- X{
- X int x;
- X extern int smile();
- X ed_line head, *basura;
- X char width, tk[256];
- X FILE *ants;
- X
- X init_tty();
- X if ((argc < 2)||(argc > 3)) {
- X fprintf(stderr, "Usage: %s file [line lenght]\n",argv[0]);
- X restore_tty();
- X exit(1);
- X }
- X width = 35;
- X if (argc == 3)
- X width = atoi(argv[2]);
- X if ((ants = fopen(argv[1],"r")) == NULL) {
- X head.previous = head.next = NULL;
- X head.data = (char *)malloc(2);
- X head.len = *(head.data) = 0;
- X }
- X else {
- X head.previous = NULL;
- X basura = &head;
- X loop:
- X if (fgets(tk, width, ants)) {
- X basura->len = strlen(tk);
- X tk[--(basura->len)] = 0;
- X basura->data = (char *)malloc(basura->len + 1);
- X strcpy(basura->data,tk);
- X basura->next = (ed_line *)malloc(sizeof(head));
- X (basura->next)->previous = basura;
- X basura = basura->next;
- X goto loop;
- X }
- X else {
- X basura->next = NULL;
- X basura->len = 0;
- X basura->data = (char *)malloc(2);
- X *(basura->data) = 0;
- X }
- X fclose(ants);
- X }
- X x = smile(&head, 1, width);
- X if (x == ABORT) {
- X prtstr("SMiLE Aborted... Changes Discarded\n");
- X }
- X else {
- X prtstr("SMiLE saving File\n");
- X if (ants = fopen(argv[1],"w")) {
- X basura = &head;
- X while (basura) {
- X fprintf(ants,"%s\n",basura->data);
- X basura = basura->next;
- X }
- X fclose(ants);
- X }
- X else
- X fprintf(stderr,"%s: can not write to file %s\n",argv[0],argv[1]);
- X }
- X restore_tty();
- X}
- Xsmile_help(wwst,width)
- Xchar wwst,width;
- X{
- X prtstr("SMiLE Help SubSystem\n\n");
- X prtstr("Current Screen Width = ");
- X printf("%2d",width);
- X prtstr(" Word Wrap is ");
- X if (wwst)
- X prtstr("enabled\n");
- X else
- X prtstr("disabled\n");
- X prtstr("SMiLE -- Simple MIni Line Editor\n\n");
- X prtstr("This is a simple mini line editor, suitable for editing messages for mail\n");
- X prtstr("or BBS posts. It has two integrated command sets for maximum compatibilty.\n");
- X prtstr("First Command set is the SMiLE command set, that supports Easy Multi line\n");
- X prtstr("editing with easy cursor control, and the other is a C-Net or Color BBS, dot\n");
- X prtstr("command or slash command set.\n");
- X prtstr("The Slash and Command Set of C-Net and Color BBS is not completely supported\n");
- X prtstr("except for the most common commands.\n");
- X pause();
- X prtstr("The New SMiLE commands that allow all the powerful SMiLE features are:\n");
- X prtstr("CTRL + N Next Line CTRL + P Previous Line\n");
- X prtstr("CTRL + B Backward Char CTRL + F Forward Char\n");
- X prtstr("CTRL + K Kill Line CTRL + L List The Text\n");
- X prtstr("CTRL + A Previews Text CTRL + [ ESC Key, invokes SMiLE Menu\n");
- X prtstr("Typing . or / at the beggining of a Line enters the QUICK Menu Mode. i.e.\n");
- X prtstr("you will be prompted for a option from the SMiLE menu, but no menu will be\n");
- X prtstr("displayed. (C-Net/Color BBS Compatibility command)\n");
- X}
- SHAR_EOF
- if test 3320 -ne "`wc -c 'smile_main.c'`"
- then
- echo shar: error transmitting "'smile_main.c'" '(should have been 3320 characters)'
- fi
- echo shar: extracting "'suntty.c'" '(1864 characters)'
- if test -f 'suntty.c'
- then
- echo shar: over-writing existing file "'suntty.c'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'suntty.c'
- X/* SMiLE -- Simple MIni Line Editor
- X Copyright (C) 1989 By Alejandro Liu
- X You are given permission to Freely Copy and distribute this program
- X in its unmodifed form provided that this copyright notice is included.
- X */
- X
- X#include <stdio.h>
- X#include <sys/ioctl.h>
- X#include "bsd_tty.h"
- X#define DEL_00 127
- X#define DEL_01 20
- X#define DEL_02 8
- X#define LEFT_C 2
- X#define RIGHT_C 6
- X#define DONE0 13
- X#define DONE1 10
- X
- X#define STDIN 0
- X#define STDOUT 1
- X#define STDERR 2
- X#define ERROR -1
- X#define TSTR 300
- X
- Xstruct sgttyb old;
- X
- Xinit_tty()
- X{
- X struct sgttyb new;
- X if (ioctl(STDIN, TIOCGETP, &old) == ERROR) {
- X perror("Can not get Terminal parameters -- ioctl");
- X exit(1);
- X }
- X new.sg_ospeed = old.sg_ospeed;
- X new.sg_ispeed = old.sg_ispeed;
- X new.sg_flags = ((old.sg_flags | CBREAK) & ~ECHO) & ~TANDEM;
- X if (ioctl(STDIN, TIOCSETN, &new) == ERROR) {
- X perror("Can not set Terminal Characteristics -- ioctl");
- X exit(1);
- X }
- X}
- X
- Xrestore_tty()
- X{
- X if (ioctl(STDIN, TIOCSETN, &old) == ERROR) {
- X perror("Can not restore Terminal Characteristics -- ioctl");
- X exit(1);
- X }
- X}
- X
- Xchar *getstr()
- X{
- X char *tmp1, *tmp2;
- X char key;
- X
- X tmp1 = tmp2 = (char *)malloc(TSTR);
- X *(tmp1) = 0;
- X for (;;) {
- X key = 127 & getkey();
- X switch (key) {
- X case DEL_00:
- X case DEL_01:
- X case DEL_02:
- X if (tmp1 == tmp2)
- X beep();
- X else {
- X delete(1);
- X *(--tmp1) = 0;
- X }
- X break;
- X case LEFT_C:
- X if (tmp1 == tmp2)
- X beep();
- X else {
- X backspace(1);
- X --tmp1;
- X }
- X break;
- X case RIGHT_C:
- X if (*tmp1)
- X prtchr(*(tmp1++));
- X else
- X beep();
- X break;
- X case DONE0:
- X case DONE1:
- X key = strlen(tmp2) + 1;
- X tmp1 = (char *)malloc(key);
- X strcpy(tmp1,tmp2);
- X free(tmp2);
- X return(tmp1);
- X default:
- X if ((31<key)&&(key<127)) {
- X if (!(*tmp1))
- X *(tmp1+1) = 0;
- X *(tmp1++) = key;
- X prtchr(key);
- X }
- X else
- X beep();
- X }
- X }
- X}
- SHAR_EOF
- if test 1864 -ne "`wc -c 'suntty.c'`"
- then
- echo shar: error transmitting "'suntty.c'" '(should have been 1864 characters)'
- fi
- echo shar: extracting "'Makefile'" '(440 characters)'
- if test -f 'Makefile'
- then
- echo shar: over-writing existing file "'Makefile'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'Makefile'
- X# Primitive Makefile. Not that great but helps!
- X
- Xsmile: smile.o smile_main.o suntty.o
- X cc -O smile.o smile_main.o suntty.o -o smile
- X
- Xsmile.o: smile.c smile.h bsd_tty.h
- X cc -c -O smile.c
- X
- Xsmile_main.o: smile_main.c smile.h
- X cc -c -O smile_main.c
- X
- Xsuntty.o: suntty.c
- X cc -c -O suntty.c
- X
- Xlint:
- X lint smile.c smile_main.c suntty.c
- X
- Xshar:
- X shar -c -p X smile.c bsd_tty.h smile.h smile_main.c suntty.c \
- X Makefile README smile.man > smile.shar
- X
- SHAR_EOF
- if test 440 -ne "`wc -c 'Makefile'`"
- then
- echo shar: error transmitting "'Makefile'" '(should have been 440 characters)'
- fi
- echo shar: extracting "'README'" '(869 characters)'
- if test -f 'README'
- then
- echo shar: over-writing existing file "'README'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'README'
- XSMiLE -- Simple MIni Line Editor
- X--------------------------------
- X
- XThis program was originally intended to be used in a BBS program, but
- XI got lazy and didn't write the BBS. The idea of this program is to
- Xprovide a very easy to use and rather "powerful" Line Editor with very
- Xlittle terminal support. This program was orginially written for a
- XCommodore 64, so it should be rather easy to port to other system.
- XThis current version is a Unix BSD type system. (Actually Sun OS
- X4.0.?). I haven't tested if it compiles on other system, but It
- XSHOULD!
- X
- XYou can include this program in your programs as long as you give me
- Xcredit and send me a E-mail postcard! And you can hack it as much as
- Xyou like provide it you keep the copyright notice and redistribut it
- Xunmodified (You can distribute your changes in a DIFF file though!)
- X
- X Alejandro Liu <acliu@skat.usc.edu>
- X
- SHAR_EOF
- if test 869 -ne "`wc -c 'README'`"
- then
- echo shar: error transmitting "'README'" '(should have been 869 characters)'
- fi
- echo shar: extracting "'smile.man'" '(2090 characters)'
- if test -f 'smile.man'
- then
- echo shar: over-writing existing file "'smile.man'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'smile.man'
- X.TH SMILE L
- X.SH NAME
- XSMiLE \- Simple MIni Line Editor
- X.SH SYNTAX
- X.B smile
- X.I
- Xfilename [screen width]
- X.SH DESCRIPTION
- XThis program is a very simple line editor that doesn't use the TermCap
- Xor Curses library to do its editing. It provides "advanced" features
- Xlike auto word wrap, and Full line editing. The main advantage of
- X.I smile
- Xis that it can be used in almost any CRT terminal, regardless of its
- Xtype, as long as it supports the almost universal convention of using
- X^H (ASCII 8) as non destructive backspace.
- X.SH OPERATION
- X.I smile
- Xis entered from UNIX by typing the command line followed by a filename
- Xand an optional Screen width. The default is specified during
- Xcompilation time and varies from site to site.
- X.PP
- X.I smile
- Xis advertised to be very easy to use, and it has a built in help (sort
- Xof) that can be displayed any time. The commands to know are:
- X.br
- X.sp
- X.nf
- Xkey function
- X--- --------
- X^N Next Line
- X^P Previous Line
- X^F Forward Character
- X^B Backward Character
- X^K Kill line
- X^A Previews text
- X^L List Text
- XESC SMILE menu
- X.sp
- X.fi
- X.PP
- XAlso,
- X.I smile
- Xsupports the use of "dot" or "slash" command that are very common on
- Xsome BBS programs line editors. Basicly what they do is at the first
- Xcolumn of any line if you press any of those keys you will be prompted
- Xfor a menu option. Pressing "." or "/" again will put a "." or "/" in
- Xthe text.
- X.PP
- XOptions in
- X.I smile
- Xmenu:
- X.br
- X.sp
- X.nf
- XOption function
- X------ --------
- X S Saves the file
- X A Abort Editor and discards changes
- X W Word Wrap Togle
- X N New Screen Width
- X H Help Screen
- X C Check Spelling
- X P Preview Text
- X L List Text
- X.sp
- X.fi
- X.SH AUTHOR
- XAlejandro Liu
- X.SH "SEE ALSO"
- Xemacs(1), vi(1), ed(1)
- X.SH BUGS
- X.I Smile
- Xdoesn't support terminals that don't use ^H as backspace. Also, the
- Xprogram will perform strangely of terminals that the ^H performs a
- Xdestructive backspace.
- X.PP
- XThe Spell checker doesn't work.
- X.PP
- X.I Smile
- Xkeeps with the UNIX tradition of optimism by doing very little error
- Xchecking!
- X.PP
- X.I Smile
- Xwas originally written for the C-64 (Serious Bug here!) for use in a
- XBBS program.
- X.br
- X
- SHAR_EOF
- echo shar: a missing newline was added to "'smile.man'"
- if test 2090 -ne "`wc -c 'smile.man'`"
- then
- echo shar: error transmitting "'smile.man'" '(should have been 2090 characters)'
- fi
- # End of shell archive
- exit 0
-
- Alejandro Liu
- acliu%skat@usc.edu acliu@skat.usc.edu
- (Simple .signature, $CHEAP$)
-
-